home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / hypercar / xcmd / newfolde.sit / NF Source / NewFolder.c < prev    next >
C/C++ Source or Header  |  1990-04-03  |  2KB  |  114 lines

  1. /*
  2.     NewFolder - Create a new folder
  3.     
  4.     This XCMD is Copyright 1990, by David Elliott. 
  5. */
  6.  
  7. #include "HyperXCmd.h"
  8. #include <SetUpA4.h>
  9. #include <FileMgr.h>
  10.  
  11. /* Constants */
  12. #define NULL        0L
  13. #define FALSE        0
  14. #define TRUE        1
  15.  
  16. /* Macros */
  17. #define strlen(s)            StringLength(paramPtr, (StringPtr) (s))
  18. #define pasToZero(s)        PasToZero(paramPtr, (StringPtr) (s))
  19. #define zeroToPas(s1,s2)    ZeroToPas(paramPtr, (char *) (s1),    \
  20.                             (StringPtr) (s2))
  21. #define numToStr(l,s)        NumToStr(paramPtr, (long) (l), s)
  22.  
  23. /* Static variables */
  24. static char sWrongArgs[] = "\pWrong number of arguments";
  25.  
  26. /* Prototypes */
  27. pascal void main(XCmdBlockPtr);
  28. int CreateFolder(char *);
  29.  
  30. pascal void main(paramPtr)
  31.     XCmdBlockPtr    paramPtr;
  32. {
  33.     int err;
  34.     int lasterr;
  35.     int pnum;
  36.     Str31 str;
  37.     int bigerr = 0;
  38.  
  39.     RememberA0();
  40.     SetUpA4();
  41.  
  42.     pnum = 0;
  43.     while (pnum < paramPtr->paramCount) {
  44.         err = CreateFolder(*paramPtr->params[pnum]);
  45.         if (err) {
  46.             bigerr = err;
  47.         }
  48.         pnum++;
  49.     }
  50.     if (bigerr) {
  51.         numToStr(bigerr, &str);
  52.         paramPtr->returnValue = pasToZero(str.guts);
  53.     }
  54.     RestoreA4();
  55. }
  56.  
  57. int CreateFolder(name)
  58.     char *name;
  59. {
  60.     ParamBlockRec params;
  61.     int err;
  62.     char *cp;
  63.     char savec;
  64.     
  65.     params.fileParam.ioCompletion = NULL;
  66.     params.fileParam.ioResult = 0;
  67.     params.fileParam.ioVRefNum = -1;
  68.     params.fileParam.ioFlNum = 0;
  69.     
  70.     err = 0;
  71.     cp = name;
  72.  
  73.     /*
  74.      * Get past first :, since that is the name of the
  75.      * volume.
  76.      */
  77.      
  78.     while (*cp != ':') {
  79.         if (*cp == '\0') {
  80.             return 0;
  81.         }
  82.         cp++;
  83.     }
  84.     cp++;
  85.     for ( ; ; ) {
  86.         if (*cp == ':' || *cp == '\0') {
  87.             savec = *cp;
  88.             *cp = '\0';
  89.         } else {
  90.             cp++;
  91.             continue;
  92.         }
  93.         
  94.         CtoPstr(name);
  95.         params.fileParam.ioNamePtr = (StringPtr)name;
  96.         
  97.         PBDirCreate(¶ms, FALSE);
  98.         err = params.fileParam.ioResult;  /* Last error found is returned */
  99.  
  100.         PtoCstr(name);
  101.         if (savec == '\0') {
  102.             return err;
  103.         }
  104.         *cp = savec;
  105.         cp++;
  106.     }
  107.     return err;
  108. }
  109.  
  110. /* C routines for HyperCard callbacks */
  111. #include "XCmdGlue.inc.c"
  112.  
  113.  
  114.